package com.rm.vip.mq.demo.pp;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;

import javax.jms.*;

/**
 * @ProjectName: mq-demo
 * @Auther: GERRY
 * @Date: 2019/2/21 21:50
 * @Description: 测试高性能
 */
public class QueueProducer {
    @Test
    public void testQueueProducer() throws Exception {

        // 1、创建一个连接工厂对象，需要指定服务的ip及端口。
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("failover:(tcp://127.0.0.1:61617,tcp://127.0.0.1:61618)?randomize=true");
        // 2、使用工厂对象创建一个Connection对象。
        Connection connection = connectionFactory.createConnection();
        // 3、开启连接，调用Connection对象的start方法。
        connection.start();
        // 4、创建一个Session对象。
        // 第一个参数：是否开启事务。如果true开启事务，第二个参数无意义。一般不开启事务false。
        // 第二个参数：应答模式。自动应答或者手动应答。一般自动应答。
        Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
        // 5、使用Session对象创建一个Destination对象。两种形式queue、topic，现在应该使用queue
        Queue queue = session.createQueue("test-queue ");
        // 6、使用Session对象创建一个Producer对象。
        MessageProducer producer = session.createProducer(queue);
        // 设置发送的消息是非持久的
        // producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        /*
            <persistenceAdapter>
                <kahaDB directory="${activemq.data}/kahadb"/>
            </persistenceAdapter>
        */
        // 7、创建一个Message对象，可以使用TextMessage。
        for (int i = 0; i < 5; i++) {
            TextMessage textMessage = session.createTextMessage("第 "+i+ "一个ActiveMQ队列目的地的消息 ");
            // 8、发送消息
            producer.send(textMessage);
        }

        // 只要是事务性会话，我们都需要手动来commit提交上面发送所有信息
        // session.commit();
        // 9、关闭资源
        producer.close();
        session.close();
        connection.close();
    }
}
